package wenjun.du.androidart.view

import android.animation.ObjectAnimator
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.animation.TranslateAnimation
import android.widget.LinearLayout
import android.widget.Toast
import kotlinx.android.synthetic.main.activity_view_animator.*
import wenjun.du.androidart.R

/**
 * 几种滑动view的方式
 *
 * 主要介绍和控件滑动相关的知识
 *
 *  * 重点：ScrollX ScrollY 这两个值默认都为0，如果涉及到控件内容的移动，即调用了控件的ScrollTo或者ScrollBy方法，这两个值才会改变
 * 但是不会改变view的控件位置(left, top right和bottom)
 *
 * 如果控件发生了view动画 并不会改变控件位置的值,
 * 只有属性动画或者设置translationX/Y或者重新设置了控件的layoutParams才会发生位置值的变化
 * 不同属性 改变不同的值 lef top right和bottom 、x、y和translationX 和translationY的值
 *
 *
 * 缓慢滑动的几种实现方式：
 * 1.使用辅助类scroller, 只能改变控件的内容的移动 并不会改变控件的位置属性
 * 2.使用view动画，改变view的影像位置 不能影响位置属性 改变后的影像不能响应触摸或者点击等touch相关的事件
 * 3.使用属性动画，真正的改变控件的位置
 * 4.使用分段设值技术，比如handler 根据时间流逝分段设值
 *
 *
 * 总结：不管是哪种缓慢滑动的效果，都是将移动距离，随着时间流逝分段设值
 *
 * */
class ViewAnimatorActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_view_animator)

        scroll.setOnClickListener {
            //view基础知识之view内容的移动
            Toast.makeText(this, " 查看View Base页面", Toast.LENGTH_SHORT).show()
        }

        target.setOnClickListener {
            Toast.makeText(this, " 我是移动目标对象 ", Toast.LENGTH_SHORT).show()
            ViewUtil.checkViewLocation(target) //改变控件布局设置的属性值
        }

        animation.setOnClickListener {
            //view动画实现控件的平移 并不会改变View的位置属性相关的值
            ViewUtil.checkViewLocation(target)
            val translateAnimation = TranslateAnimation(0f, 200f, 0f, 200f)
            translateAnimation.duration = 1500
            translateAnimation.fillAfter = true
            target.startAnimation(translateAnimation)
            ViewUtil.checkViewLocation(target)
        }

        translation.setOnClickListener {
            ViewUtil.checkViewLocation(target)
            target.left = 300 //  改变控件的大小
            target.translationX = 300f // 移动控件
//          ViewUtil.checkViewLocation(target)
        }

        field.setOnClickListener {
            //属性动画改变控件位置
            ViewUtil.checkViewLocation(target) //改变控件布局设置的属性值
            val ofFloat = ObjectAnimator.ofFloat(target, "translationX", 0f, 200f)
            ofFloat.duration = 2000
            ofFloat.start()
        }


        layout_params.setOnClickListener {
            //设置控件布局属性
            ViewUtil.checkViewLocation(target) //改变控件布局位置属性
            val layoutParams = target.layoutParams as LinearLayout.LayoutParams
            layoutParams.topMargin = 300
            target.requestLayout()
        }
    }
}